package com.jingdianjichi.wx.controller;


import com.jingdianjichi.wx.handler.WxChatMsgFactory;
import com.jingdianjichi.wx.handler.WxChatMsgHandler;
import com.jingdianjichi.wx.utils.MessageUtil;
import com.jingdianjichi.wx.utils.SHA1;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;
import java.util.Objects;

@Slf4j
@RestController
public class CallBackController {


    private static final String token = "adwidhaidwoaid";

    @Resource
    private WxChatMsgFactory wxChatMsgFactory;
    @RequestMapping("/test")
    public  String test(){
        return  "hellow world";
    }

/**
 * 回调消息校验
 */
@GetMapping("/callback")
public String callback(@RequestParam("signature") String signature,
                                   @RequestParam("timestamp") String timestamp,
                                    @RequestParam("nonce") String nonce,
                                     @RequestParam("echostr")String echostr){
    log.info("get验签请求参数：signature:{}，timestamp:{}，nonce:{}，echostr:{}",
            signature, timestamp, nonce, echostr);
String shaStr= SHA1.getSHA1(token,timestamp,nonce,"");
if(signature.equals(shaStr)){
    return echostr;
}
return  "unknown";
}


    @PostMapping(value = "callback", produces = "application/xml;charset=UTF-8")
    public  String callback(
                                           @RequestBody String requestBody,
                                         @RequestParam("signature") String signature,
                                         @RequestParam("timestamp") String timestamp,
                                          @RequestParam("nonce") String nonce,
                                          @RequestParam(value = "msg_signature", required = false) String msgSignature){
                log.info("接受到微信消息:requestBody:{}",requestBody);
        Map<String,String> messageMap= MessageUtil.parseXml(requestBody);
        String msgType=messageMap.get("MsgType");
        String event=messageMap.get("Event")==null?"":messageMap.get("Event");
        log.info("msgType:{},event:{}",msgType,event);
        StringBuilder sb=new StringBuilder();
        sb.append(msgType);
        if(!StringUtils.isEmpty(event)){
            sb.append(".");
            sb.append(event);
        }
        String msgTypeKey=sb.toString();
        WxChatMsgHandler wxChatMsgHandler= wxChatMsgFactory.getHandlerByMsgType(msgTypeKey);
        if(Objects.isNull(wxChatMsgHandler)){
            return  "unknown";
        }
           String replyContent= wxChatMsgHandler.dealMsg(messageMap);
        log.info("replyContent:{}", replyContent);
        return replyContent;

    }

}
